﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Infra.Business;


namespace softpower.forms.ui.Stock
{
    public partial class FrmProduto : Form
    {
        private static FrmProduto frm = null;

        public FrmProduto()
        {
            InitializeComponent();
        }


        public static FrmProduto Instancia()
        {
            if (frm == null || frm.IsDisposed)
            {
                frm = new FrmProduto();
            }
            return frm;
        }

        private void FrmProduto_Load(object sender, EventArgs e)
        {
            List<Infra.Entity.STKTIPOPRODUTO> tipos = TipoProdutoBLL.Pesquisar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text);
            grdTipoProduto.DataSource = tipos;
           
            preencherCombos();

        }


        #region Codigo do Tipo de Produto
        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (tabPageTipoProduto.CanFocus == true)
            {
                if (!String.IsNullOrEmpty(txtTipoProduto.Text))
                {
                    TipoProdutoBLL.Salvar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text);
                    MessageBox.Show("Tipo de produto cadastrado com sucesso!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    limparTipoProduto();
                    preencherCombos();
                }
                else
                    lblErro.Text = "Campo obrigatório";
            }
            if (tabPageProduto.CanFocus == true)
            {
                if (!String.IsNullOrEmpty(txtNomeProduto.Text))
                {
                    List<Infra.Entity.STKTIPOPRODUTO> tipos = TipoProdutoBLL.Pesquisar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text);
                    var tipoProd = tipos.Single(tp => tp.tipNome == cbxTipoProduto.Text);

                    ProdutoBLL.Salvar(Convert.ToInt32("0" + txtCodProduto.Text), txtNomeProduto.Text, Convert.ToDateTime(dtData.Value), Convert.ToDecimal(txtPreco.Text), Convert.ToInt32(txtQuantidade.Text), Convert.ToInt32(txtStockMinimo.Text), Convert.ToInt32(tipoProd.CODTipoProd));
                    limparProduto();
                }
                else
                    lblErroP.Text = "Campo Obrigatório ";
            }
        }

        private void btnAlterar_Click(object sender, EventArgs e)
        {
            if (tabPageTipoProduto.CanFocus == true)
            {
                TipoProdutoBLL.Salvar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text);
                MessageBox.Show("Tipo de produto alterado com sucesso!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                limparTipoProduto();
            }
            if (tabPageProduto.CanFocus == true)
            {
                List<Infra.Entity.STKTIPOPRODUTO> tipos = TipoProdutoBLL.Pesquisar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text);
                var tipoProd = tipos.Single(tp => tp.tipNome == cbxTipoProduto.Text);

                ProdutoBLL.Salvar(Convert.ToInt32("0" + txtCodProduto.Text), txtNomeProduto.Text, Convert.ToDateTime(dtData.Value), Convert.ToDecimal(txtPreco.Text), Convert.ToInt32(txtQuantidade.Text), Convert.ToInt32(txtStockMinimo.Text), Convert.ToInt32(tipoProd.CODTipoProd));
                limparProduto();
            }

        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (tabPageTipoProduto.CanFocus == true)
            {
                if (MessageBox.Show("A exclusão irá apagar permanentemente o tipo de produto. Continuar?", "Confirmação",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    TipoProdutoBLL.Excluir(Convert.ToInt32("0" + txtCodTipoProduto.Text));
                    MessageBox.Show("Tipo de produto excluido com sucesso", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    limparTipoProduto();
                }
                else
                MessageBox.Show("Operação cancelada!","Info",MessageBoxButtons.OK,MessageBoxIcon.Warning);
            }
            if (tabPageProduto.CanFocus == true)
            {
                if (MessageBox.Show("A exclusão irá apagar permanentemente o produto. Continuar?", "Confirmação",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    ProdutoBLL.Excluir(Convert.ToInt32("0" + txtCodProduto.Text));
                    MessageBox.Show("Produto excluido com sucesso", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    limparProduto();
                }
                else
                    MessageBox.Show("Operação cancelada!","Info",MessageBoxButtons.OK,MessageBoxIcon.Warning);
            }
        }

        private void btnPesquisaTipoProduto_Click(object sender, EventArgs e)
        {
            List<Infra.Entity.STKTIPOPRODUTO> tipos = TipoProdutoBLL.Pesquisar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text);
            grdTipoProduto.DataSource = tipos;
            foreach (var tp in tipos)
            {
                txtTipoProduto.Text = tp.tipNome;
            }
        }
        private void btrnPesquisaCodProd_Click(object sender, EventArgs e)
        {
            List<Infra.Entity.STKTIPOPRODUTO> tipos = TipoProdutoBLL.Pesquisar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text);
            var tipoProd = tipos.Single(tp => tp.tipNome == cbxTipoProduto.Text);

            List<Infra.Entity.STKPRODUTO> produtos = ProdutoBLL.Pesquisar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtNomeProduto.Text, Convert.ToInt32(tipoProd.CODTipoProd), Convert.ToDateTime(dtData.Value));
            grdProduto.DataSource = produtos;
            foreach (var tp in produtos)
            {
                txtPreco.Text = Convert.ToString(tp.proPreco);
                txtCodProduto.Text = Convert.ToString(tp.CODTipoProd);
                txtNomeProduto.Text = tp.proNome;
                txtQuantidade.Text = Convert.ToString(tp.proQuantidade);
                txtStockMinimo.Text = Convert.ToString(tp.proStockMinimo);
                //chkStatus.Checked = false;
            }
        }


        private void btnLimpar_Click(object sender, EventArgs e)
        {
            limparTipoProduto();
            grdTipoProduto.DataSource = TipoProdutoBLL.Pesquisar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text);
        }


        private void limparTipoProduto()
        {
            txtCodTipoProduto.Text = string.Empty;
            txtTipoProduto.Text = string.Empty;
        }


        private void limparProduto()
        {
            txtCodProduto.Text = string.Empty;
            txtNomeProduto.Text = string.Empty;
            txtPreco.Text = string.Empty;
            txtQuantidade.Text = string.Empty;
            txtStockMinimo.Text = string.Empty;
            chkStatus.Checked = false;

        }


        private void txtTipoProduto_TextChanged(object sender, EventArgs e)
        {
            lblErro.Text = String.Empty;
        }
        private void txtNomeProduto_TextChanged(object sender, EventArgs e)
        {
            lblErroP.Text = String.Empty;
        }

        private void preencherCombos()
        {
            List<Infra.Entity.STKTIPOPRODUTO> tipos = TipoProdutoBLL.Pesquisar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text);

            cbxTipoProduto.DataSource = tipos;
            cbxTipoProduto.ValueMember = "CODTipoProd";
            cbxTipoProduto.DisplayMember = "tipNome";
            cbxTipoProduto.Focus();

            //OU...
            //List<Infra.Entity.tbTipo> tipos = TipoProdutoBLL.Pesquisar(Convert.ToInt32("0" + txtCodTipoProduto.Text), txtTipoProduto.Text
            //foreach (var item in tipos)
            //{
            //    cbxTipoProduto.Items.Add(item.tipNome);
            //}

        }
        #endregion













        private void timer1_Tick(object sender, EventArgs e)
        {
            if (lblErroP.BackColor == Color.Blue)
                lblErroP.BackColor = Color.Red;
            else
                lblErroP.BackColor = Color.Blue;

            if (lblErro.Visible == true)
                lblErro.Visible = false;
            else
                lblErro.Visible = true;
        }
    }
}
